import datetime
import uuid
from auction_celery.main import app

from api import models


@app.task(name="check_auction")
def check_auction():
    """拍卖场未开始--->预售"""
    # 当前时间，拍卖场开始时间，拍卖场结束时间
    now = datetime.datetime.now()
    # 拍卖场开始时间<当前时间---status修改成拍卖中
    # 1. 查询到状态为未开拍且开拍时间<当前时间 的拍卖场
    query_auction = models.Auction.objects.filter(status=1, preview_start_time__lte=now,
                                                  preview_end_time__gte=now)
    # 专场的商品状态修改
    for item in query_auction:
        item.status = 2
        item.save()
    # 专场的status修改
    query_auction.update(status=2)
    return 'ok0'


@app.task(name="check_auction_pay")
def check_auction_pay():
    """拍卖场预售--->开始"""
    # 当前时间，拍卖场开始时间，拍卖场结束时间
    now = datetime.datetime.now()
    # 拍卖场开始时间<当前时间---status修改成拍卖中
    # 1. 查询到状态为未开拍且开拍时间<当前时间 的拍卖场
    query_auction = models.Auction.objects.filter(status=2, auction_start_time__lte=now,
                                                  auction_end_time__gte=now)
    # 专场的商品状态修改
    for item in query_auction:
        item.status = 3
        item.save()
        # 专场的status修改
    query_auction.update(status=3)
    return 'ok00'


@app.task(name="check_auction_end")
def check_auction_end():
    """拍卖场开始--->结束"""
    # 当前时间，拍卖场开始时间，拍卖场结束时间
    now = datetime.datetime.now()
    # 拍卖场开始时间<当前时间---status修改成拍卖中
    # 1. 查询到状态为未开拍且开拍时间<当前时间 的拍卖场
    query_auction = models.Auction.objects.filter(status=3, auction_end_time__lte=now, is_operation=False)
    # 专场的商品状态修改
    total_price = 0
    for item in query_auction:
        # item--- 拍卖场
        # 查询到所有结束的商品
        auction_item_query = item.auction_item.all().filter(status=3)
        for auction_item in auction_item_query:
            # auction_item 拍品
            # 根据价格判断是成交/流拍
            if auction_item.bid_record.all():
                max_price = auction_item.bid_record.all().filter(status=1).order_by('-id').first().price
                total_price += max_price
                # 当前商品的价格添加
                auction_item.deal_price = max_price
                auction_item.save()
                # 为出价最高者，创建订单
                userinfo = auction_item.bid_record.all().order_by('-id').first().user
                order_obj = models.Order.objects.create(
                    uid=str(uuid.uuid4()),
                    userinfo=userinfo,
                    auction=item,
                    auction_item=auction_item,
                    price=max_price,
                )
                item.auction_item.filter(status=3).update(status=4)
            else:
                item.auction_item.filter(status=3).update(status=5)
        # 当前专卖场的总价格，
        item.total_price = total_price
    # 把当前专场的状态修改成结束
    query_auction.update(status=4, is_operation=True)
    return 'ok'


@app.task(name="check_auction_item_order")
def check_auction_item_order():
    """生成的订单支付--状态修改"""
    # 当前时间，拍卖场开始时间，拍卖场结束时间
    now = datetime.datetime.now()
    # 当前时间 时间间隔 创建时间 create_time
    # 创建时间  < 当前时间 - 时间间隔
    # 时间间隔 + 创建时间 < 当前时间
    timer = now - datetime.timedelta(days=1)
    query_order = models.Order.objects.filter(status=1, create_time__lte=timer).update(status=3)
    return 'ok'


#  支付时间 < 当前时间 + 时间段


@app.task(name="check_coupon_start")
def check_coupon_start():
    now = datetime.datetime.now()
    # 未发布---未过期
    query_auction = models.CouponStrength.objects.filter(status=1, start_time__lte=now, end_time__gte=now)
    # 专场的status修改
    query_auction.update(status=2)
    return 'ok'


@app.task(name="check_coupon_end")
def check_coupon_end():
    now = datetime.datetime.now()
    # 未过期---已过期
    query_auction = models.CouponStrength.objects.filter(status=2, end_time__lte=now)
    query_auction.update(status=3)
    return 'ok'
